Spring MVC with 다른 구성 요소
Interceptor
이렇게 인증을 하는데 중복되는 로직이 있을 경우, 중복을 줄이기 위해 Interceptor 사용 가능

이런 식으로 사용 가능

MethodArgumentResovler
요청의 body나 parameters를 객체로 주입시켜줌
여기서 인증 객체를 따로 만들어서 주입도 가능
WebMvcConfigurer

- addPathPatterns: 이걸 통해 파라미터의 경로로 들어온 요청을 미리 처리할 수 있음
addViewController(ViewControllerRegistry)
ViewControllerRegistry의 addViewController를 통해 컨트롤러 설정 없이 특정 View를 반환하도록 할 수 있다.
addInterceptors(InterceptorRegistry)
InterceptorRegistry의 addInterceptor메서드에 Incerceptor 구현체를 넣고, addPathPatterns 에 패스 패턴을 넣음으로써 인터셉터 추가 가능
addArgumentResolvers(final List<HandlerMethodArgumentResolver>)
HandlerMethodArgumentResolver의 리스트에 새로 HandlerMethodArgumentResolver를 구현한 구현체를 추가함으로써 사용 가능하다.
예를 들어 아래와 같은 HandlerMethodArgumentResolver 구현체를 작성했을때
public class AuthenticationPrincipalArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(AuthenticationPrincipal.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
return new LoginMember(1L, "email", 120);
}
}
아래와 같이 추가하면 된다.
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(final List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new AuthenticationPrincipalArgumentResolver());
}
}
그리고 컨트롤러에서는 파라미터에 어노테이션을 붙임으로써 사용 가능하다.
@GetMapping("/favorites")
public ResponseEntity<List<FavoriteResponse>> showFavorites(@AuthenticationPrincipal LoginMember loginMember) { ... }
Thanks for reading! Read other posts?